package com.哈希表;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

/**
 * 给定一个整数数组和一个整数 k，判断数组中是否存在两个不同的索引 i 和 j，使得 nums [i] = nums [j]，并且 i 和 j 的差的 绝对值 至多为 k。
 */
public class 存在重复元素2 {
    static class Solution {
        public boolean containsNearbyDuplicate(int[] nums, int k) {
            Map<Integer,Integer> map = new HashMap<>();
            for(int i = 0;i<nums.length-1;i++){
                for(int j = i+1;j<nums.length;j++){
                    if(nums[i]==nums[j] && j-i <=k){
                        return true;
                    }
                }
            }
            return false;
        }
        public boolean containsNearbyDuplicate2(int[] nums, int k) {
            Set<Integer> set = new HashSet<>();
            for (int i = 0; i < nums.length; ++i) {
                if (set.contains(nums[i])) return true;
                set.add(nums[i]);
                if (set.size() > k) {
                    set.remove(nums[i - k]);
                }
            }
            return false;
        }



        public static void main(String[] args) {
            Solution solution = new Solution();
            int[] i = new int[]{1,2,3,4,5,1};
            System.out.println(solution.containsNearbyDuplicate(i,1));
            System.out.println(solution.containsNearbyDuplicate2(i,1));

        }
    }
}
